/******************************************************************************
// * 文件名：AiP33624.c
// *   作者：
// *   版本：1.0
// *   介绍：AiP33624 通用基础函数、初始化函数
******************************************************************************/

/* 头文件 -------------------------------------------------------------------*/
#include"AIP33624.H"

/* 宏定义 -------------------------------------------------------------------*/

/* 变量 ---------------------------------------------------------------------*/
uint8_t   Aip33624_Run = 0;
uint16_t  Aip33624_Rundata[Address_com_num] = {0};
uint16_t  Aip33624_Pwmdata[Address_com_num] = {0};
/**
 * @funtion    Delay_us
 * @brief      US延时
 * @param[in]  无     
 * @param[out] 无
 * @return     无
 */
void Sys_Delay_us(unsigned int us)
{
    unsigned int x;
    x = us;
    while(x--)
    {
        _nop_();
        _nop_(); 
        _nop_();
        clrwdt();
    }
}
/**********************************************************
//	*	函数名称：IIC开始函数
//	*	功		能：IIC——START
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void AiP33624_start(void)			//开始信号,SCL为高时，SDA下降沿
{													
	AiP33624_SDA = 1;
	Sys_Delay_us(1);
	AiP33624_SCL = 1;
	Sys_Delay_us(1);
	AiP33624_SDA = 0;
	Sys_Delay_us(1);
	AiP33624_SCL = 0;
	Sys_Delay_us(1);
}
/**********************************************************
//	*	函数名称：IIC停止函数
//	*	功		能：IIC-STOP
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void AiP33624_stop(void)			//停止信号,SCL为高时，SDA上升沿
{													
	AiP33624_SCL = 0;
	Sys_Delay_us(1);
	AiP33624_SDA = 0;
	Sys_Delay_us(1);
	AiP33624_SCL = 1;
	Sys_Delay_us(1);
	AiP33624_SDA = 1;
	Sys_Delay_us(1);
}
/**********************************************************
//	*	函数名称：数据传输
//	*	功		能：写8bit数据
//	*	参		数：dat（发送到数据）
//	*	返 回 值：无
***********************************************************/
void AiP33624_write(unsigned char dat)	//写8bit数据
{
	uint8_t i;
	AiP33626_SDA = 1;
	Sys_Delay_us(1);
    for(i=0; i<8; i++)
    {
        AiP33626_SCL = 0;
        Sys_Delay_us(1);
        if(dat & 0x80)
        {
            AiP33626_SDA = 1;
        }
        else
        {
            AiP33626_SDA = 0;
        }
        Sys_Delay_us(1);
        AiP33626_SCL = 1;
        Sys_Delay_us(1);
        dat <<= 1;
    }
    AiP33626_SCL = 0;
    Sys_Delay_us(1);;
}
/**********************************************************
//	*	函数名称：芯片初始化
//	*	功		能：初始化内部寄存器及显示数据
//	*	参		数：
//	*	返 回 值：
***********************************************************/
void AiP33624_init(void)
{
    uint8_t i;
    AiP33624_start();
    AiP33624_write(0x1F);// 恒流
    AiP33624_stop();
    
    AiP33624_start();
    AiP33624_write(0x78);// 地址自动+1
    AiP33624_stop();       
    
    AiP33624_start();
    AiP33624_write(0xB0); 
    AiP33624_stop();
    
    AiP33624_start();
    AiP33624_write(0x78);
    for(i = 0;i < 80;i++)
    {
        AiP33624_write(0x00);
    }
    AiP33624_stop();
    
    AiP33624_start();
    AiP33624_write(0x99); 
    AiP33624_stop();
}
/**********************************************************
//	*	函数名称：驱动
//	*	功		能：初始化内部寄存器及显示数据
//	*	参		数：
//	*	返 回 值：
***********************************************************/
void AiP33624_driver(void)
{
    uint8_t i,j;
    uint16_t k;
    if(Aip33624_Run == 0)
    {
        AiP33624_init();
        Aip33626_Run = 1;
    }
    else
    { 
		AiP33624_start();
		AiP33624_write(0x78);// 地址自动+1	
		for(i = 0,k = 0x0001;i < Address_seg_num;i++)
		{
			for(j = 0; j < (Address_com_num); j++)
			{
				if(Aip33624_Rundata[j] & k)// 是否亮
				{
                    if(Aip33624_Pwmdata[j] & k)// 是否半亮
                    {
                        AiP33624_write(0xFF);
                    }
                    else
                    {
                        AiP33624_write(0x2F);
                    }
				}
				else 
				{
					AiP33624_write(0x00);
				}
			}
			k <<= 1;
		}   
        AiP33624_stop(); 
    }
}
